import router from './router'
import store from './store'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import { getPageTitle } from '@/utils/util';
import { getToken } from '@/utils/auth';

NProgress.configure({ showSpinner: false }) // NProgress 配置
const whiteList = ['/web/'] // no redirect whitelist
router.beforeEach(async (to, from, next) => {
    // 开始进度条
    NProgress.start()
    // 获取网站基本信息
    let siteData = store.getters.site_data;
    if (!siteData || !Object.keys(siteData).length) {
        // console.log('---------------------------')
        siteData = await store.dispatch('settings/getSite')
        // console.log(siteData)
    }
    // 页面标题
    document.title = getPageTitle(siteData.siteName, to.meta.title)
    // 确认用户是否已登录
    const hasToken = getToken()
    if (hasToken) {
        console.log('已登录')
        if (to.path === '/web/login') {
            // console.log('已登录，重定向到主页')
            // 如果已登录，请重定向到主页
            next({ path: '/admin/dashboard' })
        } else {
            // next()
            const hasRoutes = store.getters.permission_routes && store.getters.permission_routes.length > 0
            if (!hasRoutes) {
                const routes = await store.dispatch('permission/generateRoutes');
                // router.addRoutes(routes)
                console.log(routes)
                const access = [...routes]
                access.forEach(item => {
                    router.addRoute(item)
                })
                console.log(router.getRoutes())
                next({ ...to, replace: true })
            } else {
                next()
            }
        }
        // NProgress.done()
    } else {
        console.log('未登录')
        // 没有令牌
        const find = whiteList.find((item) => {
            const regExp = new RegExp(`^${item}.*`, 'gi');
            return to.path.match(regExp)
        });
        if (find) {
            // 在免登录白名单中，直接进入
            next()
        } else {
            // 其他无权访问的页面将被重定向到登录页面。
            next(`/web/login?redirect=${to.path}`)
            // NProgress.done()
        }
    }
})
router.afterEach(() => {
    // finish progress bar
    NProgress.done()
})
